import re
import pandas as pd

def parse_data_from_file(file_path):
    # 读取文件内容
    with open(file_path, "r", encoding="utf-8") as file:
        data = file.read()

    # 定义正则表达式匹配模式
    pattern = re.compile(
        r"(?P<dataset>[^_]+)_(?P<model>[^_]+).*?ft(?P<ft>[^_]+).*?pl(?P<pre_len>\d+).*?Exp_(?P<Exp>\d+)"
    )
    mse_pattern = re.compile(r"mse:(?P<mse>\d+\.\d+)")
    mae_pattern = re.compile(r"mae:(?P<mae>\d+\.\d+)")

    # 解析数据
    results = []
    for block in data.strip().split("\n\n"):  # 按照空行分割数据块
        match = pattern.search(block)
        if match:
            result = match.groupdict()
            mse_match = mse_pattern.search(block)
            mae_match = mae_pattern.search(block)
            if mse_match:
                result["mse"] = float(mse_match.group("mse"))
            if mae_match:
                result["mae"] = float(mae_match.group("mae"))
            results.append(result)

    # 创建DataFrame
    df = pd.DataFrame(results)
    return df

# 指定文件路径
file_path = "result01.txt"  # 替换为你的文件路径

# 解析文件内容并生成表格
df = parse_data_from_file(file_path)
print("解析结果：")
print(df)

# 按照 dataset, model, ft, pre_len 分组，并计算 mse 和 mae 的平均值
grouped_df = df.groupby(["dataset", "model", "ft", "pre_len"]).agg({
    "mse": "mean",
    "mae": "mean"
}).reset_index()

# 重命名列以反映平均值
grouped_df.rename(columns={"mse": "mse_mean", "mae": "mae_mean"}, inplace=True)

# 打印分组后的结果
print("\n分组后的平均值结果：")
print(grouped_df)

# 可选：保存为CSV文件
grouped_df.to_csv("grouped_data0.csv", index=False)
print("分组后的平均值结果已保存到 grouped_data04.csv 文件中。")